package com.itheima.admin.task;

import com.itheima.admin.service.WemediaNewsAutoScanService;
import com.itheima.wemedia.dto.WmNewsPageReqDto;
import com.itheima.wemedia.vo.WmNewsVo;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.xxl.job.core.log.XxlJobLogger;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * @version 1.0
 * @description 说明
 * @package com.itheima.admin.task
 */
@Component
@Slf4j
public class SyncArticleTask {

    @Resource
    private WemediaNewsAutoScanService wemediaNewsAutoScanService;

    @XxlJob("syncArticleTask")
    public ReturnT syncArticleJob(String param){
        // 向调度中心打日志
        XxlJobLogger.log("文章同步任务开始运行...");
        log.debug("文章同步开始.....param={}",param);
        // 远程调用 自媒体微服查询需要同步的文章
        // 构建查询条件
        WmNewsPageReqDto dto = new WmNewsPageReqDto();
        // 发布时间必须小于等于当前系统时间
        dto.setEndPubDate(new Date());
        // 远程调用时，自媒体微服 带上状态必须为4或8
        List<WmNewsVo> voList = wemediaNewsAutoScanService.list4ArticleSync(dto);
        // 记录数量信息
        log.debug("此次需要同步的文章数量={}", voList==null?0:voList.size());
        XxlJobLogger.log("此次需要同步的文章数量={}", voList==null?0:voList.size());
        // 遍历需要同步的文章
        for (WmNewsVo wmNewsVo : voList) {
            try {
                wemediaNewsAutoScanService.syncArticleInfo(wmNewsVo);
            } catch (Exception e) {
                log.error("同步文章:{}失败了", wmNewsVo.getId(),e);
                XxlJobLogger.log("同步文章:{}失败了. 异常:{}", wmNewsVo.getId(),e.getMessage());
            }
        }
        // 同步
        log.debug("文章同步结束.....param={}",param);
        XxlJobLogger.log("文章同步任务结束...");
        return ReturnT.SUCCESS;
    }
}
